import { Controller } from 'egg';
import {Op} from 'sequelize';
import * as  xlsx from "node-xlsx";
//招聘管理接口
/**
 * 职位管理控制器类
 * 职位相关管理接口都写在这里
 */
export default class  HireController extends Controller {
    //招聘列表接口
    /**
     * @api {get} /manage/hire_list 关于我们招聘列表
     * @apiName hireList
     * @apiGroup Hire
     * @apiVersion 1.0.0
     * @apiDescription 关于我们招聘列表
     * @apiParam {String} keyword  关键字查寻
     * @apiParam {Number} page  页面位置
     * @apiParam {Number} page_size  页面尺寸
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     * @apiSuccess {Object} data 查询结果数据结构
     * @apiSuccess {Object[]} data.data_info 招聘列表
     * @apiSuccess {String} data.data_info.job_name 职位名称
     * @apiSuccess {String} data.data_info.job_type 职位类型
     * @apiSuccess {String} data.data_info.job_address 工作地点
     * @apiSuccess {String} data.data_info.publish_time 发布时间
     * @apiSuccess {String} data.data_info.create_time 创建时间
     * @apiSuccess {Number} data.data_info.job_id 职位ID
     * @apiSuccess {String} data.data_info.job_requirements 岗位要求
     * @apiSuccess {String} data.data_info.job_duty 岗位职责
     * @apiSuccess {String} data.data_info.hire_phone 招聘热线
     * @apiSuccess {String} data.data_info.hire_email 邮箱
     * @apiSuccess {String} data.data_info.job_time 工作经验/年限
     * @apiSuccess {String} data.data_info.hire_education 学历
     * @apiSuccess {Number} data.data_info.hire_number 招聘数量
     * @apiSuccess {String} data.data_count 数据总数
     * @apiSuccess {String} data.page_count 页码总数
     *
     */
    /**
     * 职位列表分页处理逻辑
     */
    async list(){
        const {ctx}=this;
        const {query}=ctx.request;
        let condition={};
        try {
            if(query.keyword){
                let keyword=query.keyword;
                condition['job_name']={[Op.like]: '%'+ keyword +'%'};
            }
            let order_condition=[
                ['create_time', 'DESC']
            ];
            //ctx.helper.sort_order(order_condition);
            ctx.body=await ctx.service.common.find_and_count_all(condition,order_condition,query,'Job');
        } catch (error) {
            ctx.body=ctx.helper.error_result("查询异常");
        }
    }

    //招聘新增
    /**
     * @api {post} /manage/hire_add 关于我们招聘新增
     * @apiName hireAdd
     * @apiGroup Hire
     * @apiVersion 1.0.0
     * @apiDescription 关于我们招聘新增
     * @apiParam {String} job_name  职位名称
     * @apiParam {Number} job_type  职位类型
     * @apiParam {String} job_address 工作地址  
     * @apiParam {String} publish_time  发布时间
     * @apiParam {String} job_requirements  岗位要求
     * @apiParam {String} job_duty  岗位职责
     * @apiParam {String} hire_phone  招聘热线
     * @apiParam {String} hire_email  邮箱
     * @apiParam {Number} job_time  工作经验/年限
     * @apiParam {String} hire_education  学历
     * @apiParam {Number} hire_number  招聘数量
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     *
     */
    /**
     * 新增职位
     */
    async add(){
        const {ctx,app}=this;
        const {body}=ctx.request
        try {
            if(!body.job_name){
                return ctx.body=ctx.helper.error_result("必须指定职位名称");
            }
            let result=await app.model.Job.create(body);
            if(result&&result['job_id']){
                return ctx.body=ctx.helper.success_result("添加成功")
            }
        } catch (error) {
            console.log(error)
        }
        ctx.body=ctx.helper.error_result("添加失败")
    }
    //招聘岗位批量导入
    /**
     * @api {post} /manage/job_import 招聘岗位批量导入
     * @apiName jobImport
     * @apiGroup Hire
     * @apiVersion 1.0.0
     * @apiDescription 招聘岗位批量导入
     * @apiParam {File} file  导入excel文件
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     * @apiSuccess {Object[]} data 返回对象数组信息
     * @apiSuccess {String} data.key_id 主键ID
     * @apiSuccess {Number} data.status 状态 0 失败 1成功
     */
    /**
     * 批量导入职位未使用
     */
    async import(){
        const {ctx,app}=this;
        let file=ctx.request.files[0];
        let newPath=file.filepath;
        try {
            let obj = xlsx.parse(newPath);
            let excelObj=obj[0].data;
            let len=excelObj.length;
            if(!Array.isArray(excelObj) ||len<=1){
                return ctx.body=ctx.helper.error_result("模板中内容为空");
            }
            //遍历表格获取数据
            let total_num=0;
            let success_num=0;
            let arr:object[]=[];
            console.log(excelObj)
            for(let i=1;i<len;i++){
                let item=excelObj[i];
                if(!item[1]||!item[2]||!item[3]||!item[4]||!item[5]||!item[6]||!item[7]||!item[8]||!item[9]||!item[10]||!item[11]){
                    continue;
                }
                total_num+=1;
                let job={
                    job_name:item[1],
                    job_type:item[2],
                    job_address:item[3],
                    publish_time:item[4],
                    job_requirements:item[5],
                    job_duty:item[6],
                    hire_phone:item[7],
                    hire_email:item[8],
                    job_time:item[9],
                    hire_education:item[10],
                    hire_number:item[11]
                }
                let result=await app.model.Job.create(job);
                if(result && result['job_id']){
                    arr.push({key_id:result['job_id'],status:1} );
                    success_num += 1;
                }else{
                    arr.push({key_id:null,status:0})
                }
            }
            ctx.body=ctx.helper.success_result('导入成功'+success_num+"条,失败"+(total_num-success_num)+"条",arr)
        } catch (error) {
            console.log(error)
            ctx.body=ctx.helper.code(false);
        }
    }
    //招聘修改
    /**
     * @api {post} /manage/hire_update 关于我们招聘修改
     * @apiName hireUpdate
     * @apiGroup Hire
     * @apiVersion 1.0.0
     * @apiDescription 关于我们招聘修改
     * @apiParam {String} job_id  职位ID
     * @apiParam {String} job_name  职位名称
     * @apiParam {Number} job_type  职位类型
     * @apiParam {String} job_address 工作地址  
     * @apiParam {String} publish_time  发布时间
     * @apiParam {String} job_requirements  岗位要求
     * @apiParam {String} job_duty  岗位职责
     * @apiParam {String} hire_phone  招聘热线
     * @apiParam {String} hire_email  邮箱
     * @apiParam {Number} job_time  工作经验/年限
     * @apiParam {String} hire_education  学历
     * @apiParam {Number} hire_number  招聘数量
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     *
     */
    async update(){
        const {ctx,app}=this;
        const {body}=ctx.request;
        if(!body.job_id){
            return ctx.body=ctx.helper.error_result("需要指定要修改的职位ID");
        }
        let param:object={};
        if(body.is_publish){
            param={publish_time:ctx.helper.date_format(new Date(),'yyyy/MM/dd hh:mm')}
        }else{
            param=ctx.helper.assign_basic({},body);
        }
        let condition={
            job_id:body.job_id
        }
        try {
            let result=await app.model.Job.update(param,{where:condition});
            ctx.body=result ? ctx.helper.success_result("操作成功") : ctx.helper.success_result("未修改数据");
        } catch (error) {
            ctx.body=ctx.helper.success_result("修改失败");
        }
    }
    //招聘删除
    /**
     * @api {post} /manage/hire_del 关于我们招聘删除
     * @apiName hireDel
     * @apiGroup Hire
     * @apiVersion 1.0.0
     * @apiDescription 关于我们招聘删除
     * @apiParam {String} job_id  职位ID
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     *
     */
    async del(){
        const {ctx,app}=this;
        const {body}=ctx.request;
        if(!body.job_id){
            return ctx.body=ctx.helper.error_result("没有指定招聘职位ID");
        }
        try {
            let result=await app.model.Job.destroy({
                where:{
                    job_id:body.job_id
                }
            })
            ctx.body=result ? ctx.helper.success_result("删除成功") :ctx.helper.error_result("删除失败!") ;   
        } catch (error) {
            return ctx.body=ctx.helper.error_result("删除职位失败!");
        }
    }
    /**
     * @api {get} /manage/hire_info 关于我们招聘详情
     * @apiName hireDel
     * @apiGroup Hire
     * @apiVersion 1.0.0
     * @apiDescription 关于我们招聘详情
     * @apiParam {String} job_id  职位ID
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     * @apiSuccess {Object} data 查询结果数据结构
     * @apiSuccess {String} data.job_name 职位名称
     * @apiSuccess {String} data.job_type 职位类型
     * @apiSuccess {String} data.job_address 工作地点
     * @apiSuccess {String} data.publish_time 发布时间
     * @apiSuccess {String} data.create_time 创建时间
     * @apiSuccess {Number} data.job_id 职位ID
     * @apiSuccess {String} data.job_requirements 岗位要求
     * @apiSuccess {String} data.job_duty 岗位职责
     * @apiSuccess {String} data.hire_phone 招聘热线
     * @apiSuccess {String} data.hire_email 邮箱
     * @apiSuccess {String} data.job_time 工作经验/年限
     * @apiSuccess {String} data.hire_education 学历
     * @apiSuccess {Number} data.hire_number 招聘数量
     *
     */
    async info(){
        const {ctx}=this;
        const {query}=ctx.request;
        if(!query.job_id){
            return ctx.body=ctx.helper.error_result("未指定需要查询的职位ID");
        }
        try {
            let condition={
                job_id:query.job_id
            }
            let job=await ctx.service.common.find_one(condition,"Job","job_id");
    
            return ctx.body=ctx.helper.success_result("查询成功",job)
        } catch (error) {
        }
        return ctx.body=ctx.helper.error_result("查询失败")
        
    }
}

